package com.wxwyapp.service;

import java.sql.SQLException;
import java.util.UUID;

import com.frame.ar.kit.ObjKit;
import com.frame.ar.util.TimeUtil;
import com.frame.jfinal.service.BaseService;
import com.jfinal.aop.Before;
import com.jfinal.plugin.activerecord.Db;
import com.jfinal.plugin.activerecord.IAtom;
import com.jfinal.plugin.activerecord.Model;
import com.jfinal.plugin.activerecord.Record;
import com.jfinal.plugin.activerecord.tx.Tx;
import com.weixin.model.AppUser;
import com.wxwyapp.config.DBSource;
import com.wxwyapp.model.ChangeApply;

/**
 * 作用描述：用户相关操作服务层
 * @author LRC
 * @createDate 2015年9月28日
 * @version v1.0 
 * @updateRecord 格式：时间，作者，修改说明
 **
 * 
 */
public class UserService extends BaseService{

	/**
	 * 功能描述：物业用户bind微信
	 * @createDate 2015年10月12日 by LRC
	 * @param user
	 * @return 
	 * @updateRecord 格式：时间，作者，修改说明
	 **
	 * 
	 */
	public static Boolean wyUserBindWeiXin(AppUser user){
		//取传入的用户信息与物业后台用户进行匹配
		String userName = user.getStr("personName");
		String idCard = user.getStr("idCard");
		String telephone = user.getStr("telephone");
		Boolean result = false;
		
		result = ObjKit.isBank(userName,idCard,telephone);
		if(result)return false;
		//查询收费系统中员工信息表，找到对应的用户信息，如果存在，则是员工
		String sql1 ="select * from sa_opperson where sName=? and sIDCard=? and sOfficePhone=?";
		Record employee = Db.use(DBSource.PMS2_X5SYS).findFirst(sql1, userName,idCard,telephone);
		
		//首先从物业收费系统查询用户信息
		String sql2 = "select * from pms_bi_person where name=? and idcard=? and telephone=?";
		Record person = Db.use(DBSource.PMS2_PMS).findFirst(sql2, userName,idCard,telephone);
		
		if(person!=null){//注册成功
			//如果获取到对应的用户则绑定成功，保存用户信息
			user.set("personId", person.get("id"));
			user.set("personNo", person.get("no"));
			if(person.getInt("isEmployee")==1){
				//员工即住户
				user.set("personType", 3);
				user.set("employeeSID", person.get("employeeSID"));
			}else{
				user.set("personType", 1);
			}
			user.set("bindSystem", DBSource.PMS2_PMS);//绑定用户所属系统 物业收费系统业务数据库
		}else if(employee!=null){
			user.set("personId", employee.get("sID"));
			user.set("personNo", employee.get("sCode"));
			user.set("personType", 2);//仅是员工
			user.set("bindSystem", DBSource.PMS2_X5SYS);//绑定用户所属系统 物业收费系统平台数据库
		}else{
			return false;
		}
		//设置bindStatus=1
		user.set("bindStatus", 1);
		user.set("bindTime", new java.sql.Timestamp(System.currentTimeMillis()));//设置绑定时间
		
		//设置用户登录token
		String token = UUID.randomUUID().toString();
		user.set("loginToken", token);
		user.set("loginTime",TimeUtil.newTimestamp());
		
		System.out.println(user);
		
		result = user.update();
		
		return result;
	}

	/**
	 * 功能描述：用户提交变更联系电话申请
	 * @createDate 2015年10月18日 by LRC
	 * @param arg
	 * @return 
	 * @updateRecord 格式：时间，作者，修改说明
	 **
	 * 
	 */
	@Before(Tx.class)
	public static Boolean changeUserPhone(final String telephone) {
		//带事务操作
		return Db.tx(new IAtom() {
			@Override
			public boolean run() throws SQLException {
				//首先判断登录用户
				AppUser user = AppUser.getCurrentUser();
				if(user==null)return false;
				
				//修改微信绑定用户信息中的用户联系电话
				user.set("telephone", telephone);
				
				if(user.update()){
					Record person = AppUser.dao.getPMSPersonInfo(user.get("personId"));
					if(person==null)return false;
					//pms变更中间表插入数据
					ChangeApply ca = new ChangeApply();
					ca.set("changeScope", "personinfo");//个人信息变更
					ca.set("item", "telephone");//变更项目
					ca.set("oldValue", user.get("telephone"));//旧值
					ca.set("newValue", telephone);//新值
					ca.set("dataId", person.get("id"));//数据id
					ca.set("mainTable", "pms_bi_person");//主表名
					ca.set("applyTime", TimeUtil.newTimestamp());//申请变更时间
					ca.set("applyPerson", user.get("personName"));//申请人
					ca.set("applyPersonId", user.get("personId"));//申请人Id
					ca.set("orgCode", person.get("orgCode"));//组织机构编码
					ca.set("areaCode", person.get("areaCode"));//区域编码
					return ca.save();
				}else{
					return false;
				}
			}
		});
	}
	
}

